Flask Web 开发 用户认证 | 您所在的位置:网站首页 › flask form唯一性验证 › Flask Web 开发 用户认证 |
用户认证章节真够长的,不过涉及到的内容确实多,继续上一章节 这部分讲到的是新用户注册以后,需要在邮箱里面点击链接进行确认,这个在我们平时网站注册新用户的时候,经常会碰到
确认邮件中最简单的确认链接是http://www.example.com/auth/confirm/ 这种形式的URL,其中id 是数据库分配给用户的数字id。用户点击链接后,处理这个路由的视图函 数就将收到的用户id 作为参数进行确认,然后将用户状态更新为已确认。但这种实现方式显然不是很安全,只要用户能判断确认链接的格式,就可以随便指定URL中的数字,从而确认任意账户。解决方法是把URL 中的id 换成将相同信息安全加密后得到的令牌。
(venv) $ python manage.py shell >>> from manage import app >>> from itsdangerous import TimedJSONWebSignatureSerializer as Serializer >>> s = Serializer(app.config['SECRET_KEY'], expires_in = 3600) #expires_in表示这个秘钥令牌的有限时间是多久,秒为单位 >>> token = s.dumps({ 'confirm': 23 }) #dumps表示将{'confirm':23}转化成安全令牌 >>> token 'eyJhbGciOiJIUzI1NiIsImV4cCI6MTM4MTcxODU1OCwiaWF0IjoxMzgxNzE0OTU4fQ.ey ...' >>> data = s.loads(token) #loads则表示解析这个令牌,等于反向解码 >>> data {u'confirm': 23}
接着,有了这个验证的东西,我们起码要为我们的模型添加这样一个属性 class User(UserMixin,db.Model): __tablename__='users' id=db.Column(db.Integer,primary_key=True) email=db.Column(db.String(64),unique=True,index=True) username=db.Column(db.String(64),unique=True,index=True) role_id = db.Column(db.Integer, db.ForeignKey('roles.id')) password_hash=db.Column(db.String(128)) confirmed = db.Column(db.Boolean,default=False) |
CopyRight 2018-2019 实验室设备网 版权所有 |